Skip to content

release.yml: idempotent draft assembly (no more duplicate v0.2.1 drafts) + surface missing setup.exe - #712

Merged
frstrtr merged 1 commit into
masterfrom
ci-steward/release-draft-idempotent
Jul 15, 2026
Merged

release.yml: idempotent draft assembly (no more duplicate v0.2.1 drafts) + surface missing setup.exe#712
frstrtr merged 1 commit into
masterfrom
ci-steward/release-draft-idempotent

Conversation

@frstrtr

@frstrtr frstrtr commented Jul 15, 2026

Copy link
Copy Markdown
Owner

Fixes two release.yml/checksums-job issues surfaced completing v0.2.1 (integrator, 2026-07-15).

1. Duplicate drafts (the actual workflow bug)

The final step ran gh release create "$TAG" --draft ... dist/* unconditionally. gh release create is NOT idempotent against a tag that already has a draft — it spawns ANOTHER draft with the same tag_name. Re-running the checksums job for v0.2.1 produced four duplicate drafts (352940274/354059858/354194644/354303682); gh release view v0.2.1 returns the stale one, so the tag looked incomplete.

Fix: refresh ONE canonical draft — gh release view ? gh release upload --clobber : gh release create. Re-runs now update the single draft in place.

2. setup.exe visibility

Investigated the plumbing: setup.exe is uploaded as a separate pkg-windows-setup-<coin> artifact (not bundled in pkg-windows-), and the checksums job already pulls it into the draft via its pattern: pkg-* download. So routing is correct — the .exe was absent because that draft-producing run predated a working ISCC on VM217 (the Inno step hit its choco-fail exit-0 skip path). With persistent ISCC on VM217, a fresh run now produces + ships them.

To keep this from silently recurring, flipped the setup.exe upload from if-no-files-found: ignore to warn: a run where ISCC yields no installer is now an annotation instead of a silent .zip-only draft. Still non-fatal — the portable .zip stays the must-have deliverable.

Validation

  • YAML parses (yaml.safe_load).
  • Commit GPG-signed (key 50AB1379285EFE76).
  • No functional change to the .zip/package path; only the draft-assembly step and one upload guard.

After merge: one clean re-dispatch off the tag yields the canonical v0.2.1 draft (both .zip AND setup.exe per coin); the four duplicate drafts can then be deleted, keeping the newest canonical one.

Workflow-scope — needs your review + operator workflow-scope tap. No self-merge.

The checksums job final step used gh release create unconditionally, which
is NOT idempotent: re-running the job against an existing v-tag draft spawns
a SECOND draft with the same tag_name. Repeated v0.2.1 re-runs piled up four
duplicate drafts; gh release view returns the stale one, making the tag look
incomplete. Refresh ONE canonical draft instead: if the release exists,
gh release upload --clobber; else create it fresh.

Also flip the Windows setup.exe upload from if-no-files-found: ignore to
warn, so a run where ISCC produced no installer is visible as an annotation
rather than silently yielding a draft with .zip but no .exe. Still non-fatal;
the portable .zip stays the must-have deliverable. The setup.exe already
routes into the draft via the separate pkg-windows-setup-<coin> artifact,
which the checksums job pulls through its pkg-* download pattern.
@frstrtr
frstrtr merged commit e46dec8 into master Jul 15, 2026
24 of 26 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant